Skip to content

Refactor/#63 compose stable marker#76

Merged
Ojongseok merged 4 commits into
developfrom
refactor/#63-compose-stable-marker
Feb 4, 2026
Merged

Refactor/#63 compose stable marker#76
Ojongseok merged 4 commits into
developfrom
refactor/#63-compose-stable-marker

Conversation

@Ojongseok
Copy link
Copy Markdown
Member

@Ojongseok Ojongseok commented Feb 1, 2026

🔗 관련 이슈

📙 작업 설명

  • :core:model com.github.skydoves:compose-stable-marker 의존성 추가
  • compose-stablity-analyzer 플러그인과 호환 확인

💬 추가 설명 or 리뷰 포인트 (선택)

  • 현재 :core:model에 선언된 data class에 한해 @Immutable 어노테이션 추가해두었고, 병합 이후 사용하고 있는 부분에서 바로 추가하면 될 것 같습니다.

Q. Photo data class의 @OptIn(ExperimentalTime::class) constructor 해당 부분 제거해도 괜찮을까요? @serializable 경고메시지 때문에 추가해두신게 아닌가 싶습니다.

@Serializable
data class Photo @OptIn(ExperimentalTime::class) constructor(
    val id: Long = 0L,
    val imageUrl: String = "",
    val isFavorite: Boolean = false,
    val date: String = "",
)

Summary by CodeRabbit

릴리스 노트

  • Chores
    • 컴포저블 안정성 개선을 위한 경량 마커 의존성(컴파일 전용) 추가.
    • 여러 공개 데이터 모델에 불변성(Immutable) 표기 적용으로 렌더링/성능 안정성 및 예측 가능성 향상.

✏️ Tip: You can customize this high-level summary in your review settings.

@Ojongseok Ojongseok requested a review from ikseong00 February 1, 2026 09:13
@Ojongseok Ojongseok self-assigned this Feb 1, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 1, 2026

Walkthrough

core/model에 compose-stable-marker 의존성을 추가하고 여러 데이터 클래스(Album, AlbumPreview, Brand, Photo, PhotoBooth, Pose)에 @Immutable 어노테이션을 적용했습니다. Photo에서는 @OptIn(ExperimentalTime::class) 사용을 제거했습니다.

Changes

Cohort / File(s) Summary
Build / Versions
core/model/build.gradle.kts, gradle/libs.versions.toml
compose-stable-marker(v1.0.7) 라이브러리를 compileOnly로 추가하여 @Immutable 마커 사용을 가능하게 함.
Album / AlbumPreview
core/model/src/main/java/com/neki/android/core/model/Album.kt
@Immutable import 및 클래스에 @Immutable 어노테이션 추가; 기존 프로퍼티/생성자 불변.
Brand
core/model/src/main/java/com/neki/android/core/model/Brand.kt
@Immutable import 및 클래스에 @Immutable 어노테이션 추가; 기존 API 변경 없음.
Photo
core/model/src/main/java/com/neki/android/core/model/Photo.kt
클래스 레벨에 @Immutable 어노테이션 추가 및 관련 import 추가; 기존 @OptIn(ExperimentalTime::class) 제거. 프로퍼티 및 생성자 시그니처는 동일.
PhotoBooth
core/model/src/main/java/com/neki/android/core/model/PhotoBooth.kt
@Immutable import 및 클래스에 @Immutable 어노테이션 추가; 기능/시그니처 변경 없음.
Pose
core/model/src/main/java/com/neki/android/core/model/Pose.kt
@Immutable import 및 클래스에 @Immutable 어노테이션 추가; 기존 필드/생성자 변경 없음.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐰✨ 데이터는 단단히, UI는 가볍게
@Immutable 깃털로 안정 지키네
토끼는 껑충, 버그는 삐걱 멀리! 🥕🐇

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 주요 변경 사항인 compose-stable-marker 추가 및 @Immutable 어노테이션 적용을 명확하게 나타내고 있습니다.
Linked Issues check ✅ Passed PR은 #63 이슈의 모든 코딩 요구사항을 충족하고 있습니다: compose-stable-marker 라이브러리 추가, :core:model의 모든 주요 data class에 @Immutable 어노테이션 적용 완료.
Out of Scope Changes check ✅ Passed 모든 변경사항이 linked issue #63의 범위 내에 있습니다: 라이브러리 의존성 추가, 버전 정의, @Immutable 어노테이션 적용만 포함되어 있습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch refactor/#63-compose-stable-marker

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@core/model/src/main/java/com/neki/android/core/model/Pose.kt`:
- Around line 3-7: The import androidx.compose.runtime.Immutable is unused
because the `@Immutable` annotation is commented out in Pose.kt; either remove
that import to eliminate the unused import, or re-enable the annotation by
uncommenting `@Immutable` above the Pose data/class declaration to match other
models (e.g., Album, Brand, Photo, PhotoBooth) so the class annotated with
`@Serializable` is also marked `@Immutable`.
🧹 Nitpick comments (1)
core/model/src/main/java/com/neki/android/core/model/Photo.kt (1)

5-5: 사용되지 않는 import 확인 필요

@OptIn(ExperimentalTime::class) 어노테이션이 제거되었으므로 kotlin.time.ExperimentalTime import가 더 이상 사용되지 않는 것으로 보입니다. 불필요한 import는 제거하는 것이 좋습니다.

🧹 미사용 import 제거 제안
 import androidx.compose.runtime.Immutable
 import kotlinx.serialization.Serializable
-import kotlin.time.ExperimentalTime

Comment thread core/model/src/main/java/com/neki/android/core/model/Pose.kt Outdated
Copy link
Copy Markdown
Contributor

@ikseong00 ikseong00 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 컴포저블에서만 쓰이는 모델에 @Immutable 다신 부분 좋습니다!

Q. Photo data class의 @OptIn(ExperimentalTime::class) constructor 해당 부분 제거해도 괜찮을까요? @serializable 경고메시지 때문에 추가해두신게 아닌가 싶습니다.

기존 kotlinx.datetime 을 사용하고 있어서 추가했으나 String으로 바꾸면서 필요가 없어진 부분인데 놓친 것 같습니다. 제거하는 게 맞습니다!

@Ojongseok Ojongseok merged commit cb4f691 into develop Feb 4, 2026
3 checks passed
@Ojongseok Ojongseok deleted the refactor/#63-compose-stable-marker branch February 4, 2026 12:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[refactor] @Composable Stability 개선

2 participants